<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Keyboard Navigation in Menu - jQuery EasyUI Demo</title>
		<link rel="stylesheet" type="text/css" href="../../themes/default/easyui.css">
		<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
		<link rel="stylesheet" type="text/css" href="../demo.css">
		<script type="text/javascript" src="../../jquery.min.js"></script>
		<script type="text/javascript" src="../../jquery.easyui.min.js"></script>
	</head>
	<body>
		<h2>Keyboard Navigation in Menu</h2>
		<p>Press Alt+W to focus the menu. Once the menu get focus, you will be able to navigate menu using keyboard
			keys.
		</p>
		<div style="margin:20px 0;"></div>

		<div class="easyui-panel" title="Menu" style="width:150px;">
			<div id="mm-nav" data-options="inline:true" style="width:100%">
				<div onclick="javascript:alert('new')">New</div>
				<div>
					<span>Open</span>
					<div style="width:150px;">
						<div>
							<b>Word</b>
						</div>
						<div>Excel</div>
						<div>PowerPoint</div>
						<div>
							<span>M1</span>
							<div style="width:120px;">
								<div>sub1</div>
								<div>sub2</div>
								<div>
									<span>Sub</span>
									<div style="width:80px;">
										<div>sub21</div>
										<div>sub22</div>
										<div>sub23</div>
									</div>
								</div>
								<div>sub3</div>
							</div>
						</div>
						<div>
							<span>Window Demos</span>
							<div style="width:120px;">
								<div>Window</div>
								<div>Dialog</div>
								<div>EasyUI</div>
							</div>
						</div>
					</div>
				</div>
				<div data-options="iconCls:'icon-save'">Save</div>
				<div data-options="iconCls:'icon-print',disabled:true">Print</div>
				<div class="menu-sep"></div>
				<div>Exit</div>
			</div>
		</div>
		<script type="text/javascript">
			(function ($) {
				function getParentMenu(rootMenu, menu) {
					return findParent(rootMenu);

					function findParent(pmenu) {
						var p = undefined;
						$(pmenu).find('.menu-item').each(function () {
							if (!p && this.submenu) {
								if ($(this.submenu)[0] == $(menu)[0]) {
									p = pmenu;
								} else {
									p = findParent(this.submenu);
								}
							}
						});
						return p;
					}
				}

				function getParentItem(pmenu, menu) {
					var item = undefined;
					$(pmenu).find('.menu-item').each(function () {
						if ($(this.submenu)[0] == $(menu)[0]) {
							item = $(this);
							return false;
						}
					});
					return item;
				}

				$.extend($.fn.menu.methods, {
					enableNav: function (jq, rootMenu) {
						var firstItemSelector = '.menu-item:not(.menu-item-disabled):first';
						var lastItemSelector = '.menu-item:not(.menu-item-disabled):last';
						return jq.each(function () {
							var menu = $(this);
							rootMenu = $(rootMenu).length ? $(rootMenu) : menu;
							menu.attr('tabindex', '0').css('outline', 'none').unbind('.menunav').bind('keydown.menunav', function (e) {
								var item = $(this).find('.menu-active');
								switch (e.keyCode) {
									case 13:  // enter
										item.trigger('click');
										break;
									case 27:  // esc
										rootMenu.find('.menu-active').trigger('mouseleave');
										break;
									case 38:  // up
										var prev = item.length ? item.prevAll(firstItemSelector) : menu.find(lastItemSelector);
										prev.trigger('mouseenter');
										return false;
									case 40:  // down
										var next = item.length ? item.nextAll(firstItemSelector) : menu.find(firstItemSelector);
										next.trigger('mouseenter');
										return false;
									case 37:  // left
										var pmenu = getParentMenu(rootMenu, menu);
										if (pmenu) {
											item.trigger('mouseleave');
											var pitem = getParentItem(pmenu, menu);
											if (pitem) {
												pitem.trigger('mouseenter');
											}
											pmenu.focus();
										}
										return false;
									case 39:  // right
										if (item.length && item[0].submenu) {
											$(item[0].submenu).menu('enableNav', rootMenu).find(firstItemSelector).trigger('mouseenter');
											$(item[0].submenu).focus();
										}
										return false;
								}
							});
						});
					}
				});
			})(jQuery);

			$(function () {
				$('#mm-nav').menu().menu('enableNav');
				$(document).keydown(function (e) {
					if (e.altKey && e.keyCode == 87) {
						$('#mm-nav').focus();
					}
				})
			})
		</script>
	</body>
</html>